package com.atguigu.gulimall.ware.feign;

import com.atguigu.gulimall.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @program: gulimall
 * @author: yangshen
 * @description:
 * @create: 2020-07-15 15:33
 **/


/**
 * 声明式的远程调用
 *      告诉springCloud这是一个远程客户端，并指明是哪一个服务(yml文件中指定的spring.application.name)
 */
@FeignClient("gulimall-product")
public interface ProductFeignService {

    /**  1.feign调用过程
     *      当调用该接口的这个方法时，调用流程是：
     *            1.先去注册中心找到 "gulimall-product" 这个远程服务，
     *            2.再调用远程服务的 /product/skuinfo/info/{skuId} 这个请求路径的方法
     *   2.调用路径方式
     *      @FeignClient("gulimall-product")  && /product/skuinfo/info/{skuId}
     *      @FeignClient("gulimall-gateway")  && /api/product/skuinfo/info/{skuId}
     *      1.让所有请求过网关
     *          1.1、@FeignClient("gulimall-gateway"): 给网关gulimall-gateway所在的机器发请求
     *          1.2、/api/product/skuinfo/info/{skuId}， 带有api
     *      2.直接让后台指定服务处理
     *          2.1、@FeignClient("gulimall-product")：直接给gulimall-product应用服务发送请求
     *          2.2、/product/skuinfo/info/{skuId}，直接调用应用服务的接口地址
     *
     *
     *
     */
    // 获取指定skuId的信息
    @RequestMapping("/product/skuinfo/info/{skuId}")
    public R info(@PathVariable("skuId") Long skuId);
}
